//package util;
//
//import com.rczs.dao.primary.chat.TCPMsgDataDao;
//import com.rczs.dao.primary.chat.TCPMsgSendRecordDao;
//import com.rczs.entity.primary.base.Staff;
//import com.rczs.service.chat.NettyService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.net.ServerSocket;
//import java.net.Socket;
//import java.util.List;
//import java.util.concurrent.ExecutorService;
//
///**
// * Created by jinxl on 2018-06-20.
// */
//@Component
//public class TCPUtils {
//
//	private static int port = 8888;
//
//	@Autowired
//	private TCPMsgDataDao tcpMsgDataDao_;
//
//	private static TCPMsgDataDao tcpMsgDataDao;
//
//	@Autowired
//	private TCPMsgSendRecordDao tcpMsgSendRecordDao_;
//
//	@Autowired
//	private NettyService nettyService;
//
//	private static TCPMsgSendRecordDao tcpMsgSendRecordDao;
//
//	@PostConstruct
//	public void init() {
//		tcpMsgDataDao = tcpMsgDataDao_;
//		tcpMsgSendRecordDao = tcpMsgSendRecordDao_;
//	}
//
//	public static TCPClient getTCPClient() {
//		return new TCPClient(port);
//	}
//
//	public static TCPClient getTCPClient(String poolName) {
//		return new TCPClient(port, poolName);
//	}
//
//	public static TCPClient getTCPClient(int port, String poolName) {
//		return new TCPClient(port, poolName);
//	}
//
//	public static TCPServer getTCPServer(TCPCallback callback) {
//		return new TCPServer(port, callback);
//	}
//
//	public static TCPServer getTCPServer(int port, TCPCallback callback) {
//		return new TCPServer(port, callback);
//	}
//
//	public static class TCPClient {
//
//		private final int port;
//
//		private String threadPoolName;
//
//		private ExecutorService fixedThreadPool;
//
//		TCPClient(final int port) {
//			this(port, "TCPClient Thread Pool");
//		}
//
//		TCPClient(final int port, String threadPoolName) {
//			this.port = port;
//			this.threadPoolName = threadPoolName;
//			fixedThreadPool = ThreadPoolUtils.newFixedThreadPool(threadPoolName, 5);
//		}
//
//		public String getThreadPoolName() {
//			return threadPoolName;
//		}
//
//		/**
//		 * 向所有人员发送数据
//		 *
//		 * @param staffList
//		 * @param msg
//		 * @param retry
//		 *            true-发送失败后，定时重发,false-不重发
//		 */
//		public void send(final List<Staff> staffList, final String msg, final boolean retry) {
//			NettyService.getInstance().send(staffList,msg,retry);
//		}
//
//		public void sendInThread(final String ip, final String msg) {
//			fixedThreadPool.execute(new Runnable() {
//				@Override
//				public void run() {
//					send(ip, port, msg);
//				}
//			});
//		}
//
//		public String send(String ip, int port, String msg) {
//			return NettyService.getInstance().send(ip,msg);
//		}
//
//		public String send(String ip, String msg) {
//			return send(ip,this.port,msg);
//		}
//	}
//
//	public static interface TCPCallback {
//		public String callback(String msg);
//	}
//
//	public static class TCPServer {
//
//		public final static String SEND_SUCCESSFUL = "send_sucessful";
//
//		private int port;
//
//		private TCPCallback callback;
//
//		// 如果使用多线程，那就需要线程池，防止并发过高时创建过多线程耗尽资源
//		private ExecutorService threadPool;
//
//		public TCPServer(int port, TCPCallback callback) {
//			this.port = port;
//			this.callback = callback;
//			this.threadPool = ThreadPoolUtils.newFixedThreadPool("TCPServer port(" + port + ")", 11);
//		}
//
//		public void startInNewThread() {
//			threadPool.execute(new Runnable() {
//				@Override
//				public void run() {
//					start();
//				}
//			});
//		}
//
//		public void start() {
//			try {
//				ServerSocket server = new ServerSocket(port);
//				while (true) {
//					final Socket socket = server.accept();
//					final TCPCallback callback = this.callback;
//					threadPool.execute(new Runnable() {
//						@Override
//						public void run() {
//							InputStream inputStream = null;
//							OutputStream outputStream = null;
//							ByteArrayOutputStream baos = null;
//							try {
//								// 建立好连接后，从socket中获取输入流，并建立缓冲区进行读取
//								inputStream = socket.getInputStream();
//								byte[] by = new byte[2048];
//								baos = new ByteArrayOutputStream();
//								int n;
//								while ((n = inputStream.read(by)) != -1) {
//									baos.write(by, 0, n);
//								}
//								if (baos.size() > 0) {
//									String msg = StringZip.uncompressToString(baos.toByteArray(),"utf-8");
//									socket.shutdownInput();// 关闭输入流
//									outputStream = socket.getOutputStream();
//									if (callback != null) {
//										String reply = callback.callback(msg.toString());
//										if (StringUtils.isEmpty(reply)) {
//											reply = SEND_SUCCESSFUL;
//										}
//										byte[] replyBytes = reply.getBytes("UTF-8");
//										outputStream.write(replyBytes);
//										outputStream.flush();
//									}
//								}
//							} catch (Exception e) {
//								e.printStackTrace();
//							} finally {
//								try {
//									if (baos != null) {
//										baos.close();
//									}
//									if (inputStream != null) {
//										inputStream.close();
//									}
//									if (outputStream != null) {
//										outputStream.close();
//									}
//									if (socket != null) {
//										socket.close();
//									}
//								} catch (IOException e) {
//									e.printStackTrace();
//								}
//							}
//						}
//					});
//					// threadPool.submit(runnable);
//				}
//			} catch (Exception e) {
//				e.printStackTrace();
//			}
//		}
//
//	}
//}
